package com.xbongbong.saas.model;

import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.paas.toolbox.wrap.IModel;
import com.xbongbong.saas.domain.entity.FundAccountEntity;

import java.util.List;
import java.util.Map;

/**
 * @author zhouwq
 * @date 2019/10/23 15:08
 */

public interface FundAccountModel extends IModel<FundAccountEntity> {

    /**
     * 更改是否启用状态
     * @param id 主键
     * @param enable 状态
     * @return 是否成功
     * @throws XbbException error
     */
    Integer updateEnable(Long id, Integer enable) throws XbbException;

    /**
     * 根据参数查询
     * @param param 查询条件
     * @return 结果集
     */
    @Override
    List<FundAccountEntity> findEntitys(Map<String, Object> param);

    /**
     * 根据ID删除资金账户
     * @param id 主键
     * @return 是否成功
     * @throws XbbException error
     */
    Integer deleteByKey(Long id) throws XbbException;

    /**
     * 更新账户余额
     * @param corpid 公司ID
     * @param id 账户ID
     * @param amount 余额
     * @return 是否成功
     * @throws XbbException error
     */
    Integer updateAmount(String corpid, Long id, Double amount) throws XbbException;

    /**
     * 批量更新账户余额
     * @param list ID余额对应关系
     * @return 是否成功
     * @throws XbbException error
     */
    Integer updateBatchAmount(List<FundAccountEntity> list) throws XbbException;

    /**
     * 根据corpid和id获取未删除的资金账户
     *
     * @param id 账户ID
     * @param corpid 公司ID
     * @return com.xbongbong.saas.domain.entity.FundAccountEntity
     * @author 徐俊杰
     * @date 2020/3/12 10:47
     * @since v1.0
     */
    FundAccountEntity getByIdCorpid(Long id, String corpid);

    /**
     * 根据corpid获取未删除的资金账户
     *
     * @param corpid 公司ID
     * @return java.util.List<java.lang.Long>
     * @author 徐俊杰
     * @date 2020/3/13 14:34
     * @since v1.0
     */
    List<Long> getIdsByCorpid(String corpid);

    /**
     * 根据corpid获取未删除的资金账户的余额总值
     *
     * @param corpid 公司ID
     * @return double
     * @author 徐俊杰
     * @date 2020/3/13 14:50
     * @since v1.0
     */
    double sumBalanceByCorpid(String corpid);

    /**
     * 根据corpid获取未删除的资金账户的初始金额总值
     *
     * @param corpid 公司ID
     * @return double
     * @author 徐俊杰
     * @date 2020/3/19 8:50
     * @since v1.0
     */
    double sumInitialAmountByCorpid(String corpid);

    /**
     * 初始化资金账户，默认塞入一个默认账户
     * @param corpidList 公司ID集合
     * @author zhouwq
     * @date 2020/3/24 15:15
     */
    void initFundAccount(List<String> corpidList);

    /**
     * 
     * @param corpid
     * @return com.xbongbong.saas.domain.entity.FundAccountEntity
     * @author zcp
     * @since v1.0
     * @version v1.0
     */
    FundAccountEntity getDefaultFundAccount(String corpid);

    Integer save(FundAccountEntity entity) throws XbbException;
}
